package com.gw.smscheck.service.sys.impl;

import com.gw.smscheck.dao.business.vercode.VerCodeMapper;
import com.gw.smscheck.dao.sys.LoginMapper;
import com.gw.smscheck.entity.sys.LoginUser;
import com.gw.smscheck.entity.sys.VerCode;
import com.gw.smscheck.service.sys.LoginService;
import com.gw.smscheck.util.ResultObj;
import com.gw.smscheck.util.miaodiyun.IndustrySMS;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.sql.Timestamp;
import java.util.List;
import java.util.Map;

@Service
public class LoginServiceimpl  implements LoginService {
    @Autowired
    private LoginMapper loginMapper;
    @Autowired
    private VerCodeMapper verCodeMapper;



    @Override
    public ResultObj loginCheck(String loginName, String password) {
        ResultObj resultObj = new ResultObj();
        //1.判断数据是否为空
        if(loginName == null || loginName.trim().length() == 0){
            resultObj.setMsg("用户名不能为空！");
            resultObj.setCode(resultObj.CODE_FAIL);
            return resultObj;
        }
        if(password == null || password.trim().length() == 0){
            resultObj.setMsg("密码不能为空！");
            resultObj.setCode(resultObj.CODE_FAIL);
            return resultObj;
        }
        //2.验证用户名是否存在
        List<LoginUser> userList = loginMapper.findByLoginName(loginName);
        if(userList == null || userList.size() == 0){
            resultObj.setMsg("用户未注册！");
            resultObj.setCode(resultObj.CODE_FAIL);
            return resultObj;
        }

        LoginUser loginUser = userList.get(0);
        //若用户存在，判断密码
        if (password == null || !password.equals(loginUser.getPassword())) {
            resultObj.setMsg("密码不正确！");
            resultObj.setCode(resultObj.CODE_FAIL);
            return resultObj;
        }

        //3.登陆成功反馈给用户
//        Timestamp loginTime = new Timestamp(System.currentTimeMillis());// 获取当前时间
//        loginUser.setLoginTime(loginTime);
        loginMapper.updateLoginTime(loginUser);//将登陆时间更新到用户数据中
        resultObj.setMsg("登陆成功！");
        resultObj.setData(loginUser);//将对象返回
        resultObj.setCode(resultObj.CODE_SUCCESS);
        return resultObj;
    }
    /**
     * 修改密码发送验证码
     * @param phone1
     * @param phone2
     * @return
     */
    @Override
    public ResultObj setPwdSendSMS(String phone1, String phone2) {
        ResultObj resultObj = new ResultObj();
        // 1.判断数据
        if(phone1 == null || "".equals(phone1)){
            resultObj.setMsg("手机号不能为空！");
            resultObj.setCode(ResultObj.CODE_FAIL);
            return resultObj;
        }
        if(phone2 == null || "".equals(phone2)){
            resultObj.setMsg("手机号不能为空！");
            resultObj.setCode(ResultObj.CODE_FAIL);
            return resultObj;
        }
        // 2.发送短信
        Map<String,String> map1 = IndustrySMS.execute(phone1);
        Map<String,String> map2 = IndustrySMS.execute(phone2);
        // 3.入库
        if(map1.size() != 0 && map2.size() != 0){
            VerCode verCode = new VerCode();
            verCode.setPhone1(map1.get("phone"));
            verCode.setCode1(map1.get("smsCode"));
            verCode.setPhone2(map2.get("phone"));
            verCode.setCode2(map2.get("smsCode"));
            verCodeMapper.add(verCode);
            resultObj.setMsg("短信发送成功！");
            resultObj.setData(verCode);
            resultObj.setCode(ResultObj.CODE_SUCCESS);
            return resultObj;
        }
        resultObj.setMsg("短信发送失败！");
        resultObj.setCode(ResultObj.CODE_FAIL);
        return resultObj;
    }

    /**
     * 检查验证码
     * @param verCode
     * @return
     */
    @Override
    public ResultObj checkVerCode(VerCode verCode) {
        ResultObj resultObj = new ResultObj();
        // 1.判断数据

        if(verCode.getPhone1() == null || "".equals(verCode.getPhone1())){
            resultObj.setMsg("电话号码不能为空！");
            resultObj.setCode(ResultObj.CODE_FAIL);
            return resultObj;
        }
        if(verCode.getPhone2() == null || "".equals(verCode.getPhone2())){
            resultObj.setMsg("电话号码不能为空！");
            resultObj.setCode(ResultObj.CODE_FAIL);
            return resultObj;
        }
        if(verCode.getCode1() == null || "".equals(verCode.getCode1())){
            resultObj.setMsg("验证码不能为空！");
            resultObj.setCode(ResultObj.CODE_FAIL);
            return resultObj;
        }
        if(verCode.getCode2() == null || "".equals(verCode.getCode2())){
            resultObj.setMsg("验证码不能为空！");
            resultObj.setCode(ResultObj.CODE_FAIL);
            return resultObj;
        }
        if(verCode.getId() == null){
            resultObj.setMsg("id不能为空！");
            resultObj.setCode(ResultObj.CODE_FAIL);
            return resultObj;
        }
        // 2.与数据库数据对比
        VerCode result = verCodeMapper.findById(verCode.getId());
        if(result != null){
            if(verCode.getCode1().equals(result.getCode1()) && verCode.getCode2().equals(result.getCode2())){ // 验证码
                Timestamp registTime = new Timestamp(System.currentTimeMillis());// 获取当前时间
                //判断验证码是否过期（5分钟有效）
                Long endTime = registTime.getTime();
                Long startTime = result.getCreateTime().getTime();
                Long s = (endTime - startTime) / (1000 * 60);
                if(s > 5){//大于5分钟失效
                    resultObj.setMsg("验证码已经失效！");
                    resultObj.setCode(resultObj.CODE_FAIL);
                    return resultObj;
                }
                resultObj.setCode(resultObj.CODE_SUCCESS);
                resultObj.setData(result);
                resultObj.setMsg("验证码验证成功！");
                return resultObj;
            }
        }
        resultObj.setMsg("验证码不正确！");
        resultObj.setCode(resultObj.CODE_FAIL);
        return resultObj;
    }

    /**
     * 修改密码
     * @param loginUser
     * @return
     */
    @Override
    public ResultObj updatePwd(Integer id,String newPwd,String reNewPwd) {
        ResultObj resultObj = new ResultObj();
        if(id == null){
            resultObj.setMsg("id不能为空！");
            resultObj.setCode(ResultObj.CODE_FAIL);
            return resultObj;
        }
        if(newPwd == null || "".equals(newPwd)){
            resultObj.setMsg("密码不能为空！");
            resultObj.setCode(ResultObj.CODE_FAIL);
            return resultObj;
        }
        if(reNewPwd == null || "".equals(reNewPwd)){
            resultObj.setMsg("密码不能为空！");
            resultObj.setCode(ResultObj.CODE_FAIL);
            return resultObj;
        }
        if(!newPwd.equals(reNewPwd)){
            resultObj.setMsg("两次密码输入不相同！");
            resultObj.setCode(ResultObj.CODE_FAIL);
            return resultObj;
        }
        LoginUser loginUser = new LoginUser();
        loginUser.setId(id);
        loginUser.setPassword(newPwd);
        loginMapper.updataPwd(loginUser);

        resultObj.setMsg("修改成功！");
        resultObj.setCode(ResultObj.CODE_SUCCESS);
        resultObj.setData(loginUser);
        return resultObj;
    }

    /**
     * 查询所有
     * @return
     */
    @Override
    public List<LoginUser> findAll() {
        return loginMapper.findAll();
    }


}
